package com.github.gen2brain.crtaci.activities;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.VideoView;
import com.github.gen2brain.crtaci.R;
import com.github.gen2brain.crtaci.entities.Cartoon;
import com.github.gen2brain.crtaci.utils.VideoEnabledWebChromeClient;
import com.github.gen2brain.crtaci.utils.VideoEnabledWebView;
import go.crtaci.Crtaci;
public class PlayerActivity extends Activity {
public static final String TAG = "PlayerActivity";
private VideoEnabledWebView webView;
private VideoEnabledWebChromeClient webChromeClient;
private String video;
private Cartoon cartoon;
private int retry = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate");
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
cartoon = (Cartoon) bundle.get("cartoon");
video = bundle.getString("video");
switch(cartoon.service) {
case "youtube":
if(video != null && !video.isEmpty()) {
player(video);
} else {
playYouTube();
}
break;
case "dailymotion":
if(video != null && !video.isEmpty()) {
player(video);
} else {
playDailyMotion();
}
break;
case "vimeo":
if(video != null && !video.isEmpty()) {
player(video);
} else {
playVimeo();
}
break;
}
}
public void player(String url) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String player = prefs.getString("player", "default");
if(player.equals("external")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/*");
startActivity(intent);
} else if(player.equals("default")) {
defaultPlayer(url);
}
}
public void playYouTube() {
String params = "?fs=1&autoplay=1&disablekb=1&showinfo=0";
String url = "https://www.youtube.com/embed/" + cartoon.id + params;
webViewPlayer(url);
}
public void playDailyMotion() {
String params = "?html=1&fullscreen=1&autoplay=1&related=0&logo=0&info=0";
String url = "http://www.dailymotion.com/embed/video/" + cartoon.id + params;
webViewPlayer(url);
}
public void playVimeo() {
String params = "?autoplay=1&badge=0&byline=0&portrait=0&title=0";
String url = "http://player.vimeo.com/video/" + cartoon.id + params;
webViewPlayer(url);
}
public void webViewPlayer(String url) {
setContentView(R.layout.player_webview);
webView = (VideoEnabledWebView) findViewById(R.id.webView);
View nonVideoLayout = findViewById(R.id.nonVideoLayout);
ViewGroup videoLayout = (ViewGroup) findViewById(R.id.videoLayout);
View loadingView = getLayoutInflater().inflate(R.layout.loading, null);
webChromeClient = new VideoEnabledWebChromeClient(nonVideoLayout, videoLayout, loadingView);
webView.setWebChromeClient(webChromeClient);
webView.setKeepScreenOn(true);
webView.setBackgroundColor(0x00000000);
webView.loadUrl(url);
}
public void defaultPlayer(String url) {
setContentView(R.layout.player);
final VideoView videoView = (VideoView) findViewById(R.id.video_view);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
progressBar.setVisibility(View.VISIBLE);
videoView.setOnPreparedListener(new android.media.MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(android.media.MediaPlayer mp) {
progressBar.setVisibility(View.INVISIBLE);
videoView.start();
}
});
videoView.setOnErrorListener(new android.media.MediaPlayer.OnErrorListener() {
@Override
public boolean onError(android.media.MediaPlayer mp, int what, int extra) {
Log.d(TAG, "onError");
if(retry >= 2) {
video = null;
switch(cartoon.service) {
case "youtube":
playYouTube();
break;
case "dailymotion":
playDailyMotion();
break;
case "vimeo":
playVimeo();
break;
}
} else {
Log.d(TAG, "retry " + String.valueOf(retry));
new ExtractTask().execute(cartoon.service, cartoon.id);
}
return true;
}
});
videoView.setOnCompletionListener(new android.media.MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(android.media.MediaPlayer mediaPlayer) {
onBackPressed();
}
});
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
mediaController.setMediaPlayer(videoView);
videoView.setKeepScreenOn(true);
videoView.setMediaController(mediaController);
videoView.setVideoURI(Uri.parse(url));
videoView.requestFocus();
}
@Override
public void onBackPressed() {
if(video == null || video.isEmpty()) {
if(webChromeClient != null && webView != null) {
webChromeClient.onBackPressed();
webView.destroy();
}
}
super.onBackPressed();
}
private class ExtractTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... params) {
String service = params[0];
String videoId = params[1];
String result = null;
try {
result = Crtaci.extract(service, videoId);
} catch(Exception e) {
e.printStackTrace();
}
if(result == null || result.equals("empty")) {
return null;
}
return result;
}
protected void onPostExecute(String results) {
Log.d(TAG, "onPostExecute");
retry += 1;
if(results != null) {
video = results;
player(video);
}
}
}
}